package cn.huiyunche.base.service.interfaces;

import cn.huiyunche.base.service.model.DUserExt;
import cn.huiyunche.base.service.model.DWaybill;
import cn.huiyunche.base.service.vo.*;

import java.util.List;
import java.util.Map;

/**
 * 中联人送 队列 服务
 *
 * @author hdy [Tuffy]
 */
public interface TmsQueueService {

    /**
     * 开始派单
     */
    public void start() throws Exception;

    /**
     * 追加订单
     *
     * @param eov 订单对象
     */
    public void appendOrder(TmsQueueOrderVo eov) throws Exception;

    /**
     * 添加订单到队列头部
     *
     * @param eov
     */
    public void lPushOrder(TmsQueueOrderVo eov) throws Exception;

    /**
     * 移除队列指定订单。哪个参数传递方便传递哪个。
     *
     * @param waybillId   运单id
     * @param tmsSerialNo tms流水号id
     */
    public void removeOrder(String waybillId, String tmsSerialNo) throws Exception;

    /**
     * 追加司机
     *
     * @param phone 司机电话
     */
    public void appendDriver(String phone) throws Exception;

    /**
     * 移除队列指定司机
     *
     * @param phone 手机号
     */
    public void removeDriver(String phone) throws Exception;

    /**
     * 我的排队信息
     *
     * @param phone 手机号
     * @return 排队信息
     */
    public TmsQueueDriverRtnVo getMyself(String phone) throws Exception;

    /**
     * 移除队列订单
     *
     * @param orderCodes
     * @return
     */
    public Result<String> removeQueueOrder(String orderCodes) throws Exception;

    /**
     * 重新订单从新排队到队首
     *
     * @param orderCodes 中联订单号
     * @return 结果集
     */
    public Result<String> resetQueueOrder(String orderCodes) throws Exception;

    /**
     * 队列订单
     *
     * @return 结果集
     */
    public Result<List<DWaybill>> queueOrderList() throws Exception;

    /**
     * 队列司机
     *
     * @return 结果集
     */
    public Result<List<DUserExt>> queueDriverList() throws Exception;

    /**
     * 添加司机
     *
     * @param tqdv
     * @return
     */
    public boolean appendDriver4Tms(TmsQueueDriverVo tqdv) throws Exception;

    /**
     * 添加平台注册司机到队列
     *
     * @param tqdv
     */
    public void appendDriver4Platform(TmsQueueDriverVo tqdv) throws Exception;


    /**
     * 追加急发订单
     *
     * @param eov 订单对象
     */
    public void appendQuickOrder(TmsQueueOrderVo eov) throws Exception;

    /**
     * 查询司机队列信息
     *
     * @param vo 查询条件
     * @param pageVo 分页对象
     * @return
     * @throws Exception
     */
    Map<String, Object> listQueueDriverByCondition(QueueDriverVo vo, PageVo pageVo) throws Exception;

    /**
     * 导出队列司机
     * @param vo 查询条件
     * @return
     * @throws Exception
     */
    List<QueueDriverVo> exportExecl(QueueDriverVo vo) throws Exception;

}
